﻿var result = {success: false};
var preferences = null;
var dataElement = null;

function GetData()
{
	var url = 'https://www.malina.ru/login.php';
	try
	{
		AnyBalance.requestGet(url); // Запрос необходим для формирования cookie
		var content = AnyBalance.requestPost(url, {
			login: preferences.login,
			password: preferences.password,
			backurl: ''
		});
		if(!content)
		{
			throw new AnyBalance.Error('Неверный ответ сервера.');
		}
		if(AnyBalance.isAvailable('LOST'))
		{
			content += AnyBalance.requestGet ('https://www.malina.ru/siebel/personal/forecast/');
		}
		return content;
	}
	catch(e)
	{
		if(e.skip)
		{
			throw e;
		}
		throw new AnyBalance.Error('Не удалось получить данные: ' + e.message);
	}
}

function SetCounters()
{
	result['__tariff'] = $('th:contains("Номер счета")').siblings().last().text();
	if(AnyBalance.isAvailable('STATUS'))
	{
		result['STATUS'] = $('th:contains("Статус счета")').siblings().last().text();
	}
	if(AnyBalance.isAvailable('BALANCE'))
	{
		result['BALANCE'] = parseInt($('th:contains("Баланс баллов")').siblings().last().text());
	}
	if(AnyBalance.isAvailable('AVAILABLE'))
	{
		result['AVAILABLE'] = parseInt($('th:contains("Доступно к обмену на товары и услуги")').siblings().last().text().match('\\d+'));
	}
	if(AnyBalance.isAvailable('LOST'))
	{
		result['LOST'] = parseInt($('p:contains("Баллов, которые сгорят в ближайшие месяцы — ")').text().match('\\d+'));
	}
}

function ParseData(html)
{
	$(html).not('script').appendTo(dataElement);
}

function LoadPreferences()
{
	preferences = AnyBalance.getPreferences();
	if(!preferences.login || preferences.login == '')
	{
		throw new AnyBalance.Error('Введите логин');
	}
	if(!preferences.password || preferences.password == '')
	{
		throw new AnyBalance.Error('Введите пароль');
	}
}

function Init()
{
	AnyBalance.setDefaultCharset('utf-8');
	dataElement = $('<data></data>');
	dataElement.appendTo('body');
	LoadPreferences();
}

function main()
{
	Init();
	try
	{
		ParseData(GetData());
		var errorMessage = $('div.alert').text();
		if(errorMessage)
		{
			throw new AnyBalance.Error(errorMessage);
		}
		SetCounters();
	}
	finally
	{
		dataElement.remove();
	}
	result['success'] = true;
	AnyBalance.setResult(result);
}